package org.example;

import java.util.*;
import java.util.function.Function;
import java.util.jar.JarOutputStream;
import java.util.stream.Collector;
import java.util.stream.Collectors;

public class Stream_Demo4 {
    public static void main(String[] args) {
        //collect(Collector collector) 收集
        ArrayList<String> list1 = new ArrayList<>();
        Collections.addAll(list1,"张三-男-13","张三-男-13","李四-男-14","王萍-女-15","张六财-男-16","张莉-女-17","孙八-男-18");
        //list 不能去重
        List<String> newlist = list1.stream()
                //过滤
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toList());
        System.out.println(newlist);
        //set 可以去重
        System.out.println("------------------2");
        Set<String> newlist1 = list1.stream().filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toSet());
        System.out.println(newlist1);
        System.out.println("------------------3");
        //map 收集到该类中，键不能重复，分钟会报错
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张三-男-13","李四-男-14","王萍-女-15","张六财-男-16","张莉-女-17","孙八-男-18");
        Map<String, Integer> map = list.stream()
                //把男性拿出来
                .filter(s -> "男".equals(s.split("-")[1]))
                //Function 泛型1：流中每一个数据类型
                //         泛型2：表示Map集合中键的数据类型获值的数据类型
                .collect(Collectors.toMap(new Function<String, String>() {
                    @Override
                    //apply 方法参数：流中每一个数据
                    //      方法返回值：已经生成键的代码
                    //      方法体：生成键的代码
                    public String apply(String s) {
                        return s.split("-")[0];
                    }
                }, new Function<String, Integer>() {
                    @Override
                    //apply 方法参数：流中每一个数据
                    //      方法返回值：已经生成值的代码
                    //      方法体：生成值的代码
                    public Integer apply(String s) {
                        //把字符串转换为整数
                        return Integer.parseInt(s.split("-")[2]);
                    }
                }));
        System.out.println(map);
        System.out.println("-----------------4");
        //lambda表达式
        Map<String, Integer> map1 = list.stream().filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toMap(s
                                -> s.split("-")[0],
                        s -> Integer.parseInt(s.split("-")[2])));
                        System.out.println(map1);
    }
}
